<?php namespace Common\Model;
use Hdphp\Model\Model;
class Arc extends Model{
	protected $table = 'article';
	protected $validate = array(
	    //设置自动验证条件,会压入error模板,验证不通过会返出错误提示
	    array('title','required','标题不能为空',3,3),
	    array('author','required','作者不能为空',3,3),
	    array('digest','required','文章摘要不能为空',3,3),
	);
	//自动完成属性,用户不能填写的都要自动完成,$auto是框架所有固定写法
	protected $auto=array(
	    //1.字段名
	    //2.作用的系统函数(function)或者自定义方法(method)
	    //3.函数(系统函数)还是方法类型(自定义)
	    //4.处理的条件(3是必须处理)
	    //5.处理的时机(1是插入时处理)
	    array('sendtime','time','function',3,1),//文章写入时间
	    array('updatetime','time','function',3,3),//修改时间
	    array('user_uid','getUid','method',3,1),//用户id
	    array('thumb','getThumb','method',3,3),//缩略图
	);
	
	//create触发自动验证和自动完成,getUid方法和getThumb方法就会被触发
	
	
	//缩略图
	public function getThumb(){
		//如果没有文件上传
		//上传文件错误4(没有文件上传)
		if($_FILES['thumb']['error']==4){
			//发生文件没有上传的错误自主压入错误信息,然后返出一个值给控制器
			$this->error='缩略图必须上传';
			return;
		}
		//1.上传
		//框架内置上传的方法,可以设置路径,大小,类型,错误等,最后以make()结尾
		$files = Upload::path('./Upload/' . date('ymd'))->type('jpg,png,gif')->make();
		
		//如果$files为空数组,也就是上传失败,比如类型不允许,大小不允许等
		if(!$files){
			//把调入的错误压入当前模型的error属性,这样外面的控制器就可以用getError方法调用
			$this->error=Upload::getError();
//			p($this->error);die;
			return;
		}
		
		
	    //2.缩略
	    // ./Upload/160712/471.jpg 变成 ./Upload/160712/471_thumb.jpg
	    $path = $files[0]['path'];//上传文件的路径
		$type = strrchr($path, '.');//从上传文件路径的右边第一个.开始截取,结果是.jpg
		//新的路径:把上传文件原来的路径用_thumb.jpg替换.jpg
		$newPath = str_replace($type, '_thumb'.$type, $path);
		//缩略图框架内置语法:  6: 缩略图尺寸不变，自动裁切图片
		Image::thumb($path,$newPath,300,300,5);
		//返回一个新的路径
		return $newPath;
	}



	//用户id
	public function getUid(){
	    //return 出去的值就可以存入uid字段
	    //用户存储在服务器里面的id
	    return $_SESSION['info']['uid'];
	}
	
	
	
	//添加方法
	public function store(){
		//一,先验证*****
		//1.article验证
		//create触发自动验证和自动完成
		//验证没有通过的时候(触发错误提示)
		if(!$this->create()){
			return false;
		}
		//如果有错误就返回false，这个错误是在上传失败的时候赋值的
		if($this->error){
			return false;
		}
		//2.article_data验证(文章数据需要重新再次建立模型)
		$arcDataModel = new \Common\Model\ArcData;
		//如果文章数据验证失败
		if(!$arcDataModel->create()){
			//把arcData模型的错误信息压入到当前模型
			//因为外部控制器输出错误的时候,就是调用的当前模型的错误
			$this->error = $arcDataModel->getError();
			return false;
		}
		//二.添加***
		//添加arcticle表,添加文章会返回自增id
		$aid = $this ->add();
		//添加arcticle_data表(文章数据表)
		$arcDataModel->data['article_aid']=$aid;
		$arcDataModel->add();
		//添加arcticle_tag表(文章标签中间表)
		$arcTagModel = new \Common\Model\ArcTag;
		
//		var_dump($arcTagModel);die;
		
		$arcTagModel ->store($aid);
		return true;
	}
	
	
	
	
	//获得文章和分类表的关联数据
	public function getArcCate(){
		//获得数据总数
		//where条件(is_recycle=0)因为is_recycle为0就是不在回收站,将文章表(article)和分类表(category)关联,并得到一个总值,即总共有多少条数据,即不在回收站的数据(数组)
		$total=$this->join('category','category_cid','=','cid')->where("is_recycle=0")->count();
//		p($total);die;
		//分页处理
		//框架自带函数处理分页
		$page=Page::row(3)->make($total);
		
		//关联获得数据
		//page::limit()=>返回limit语句(框架自带)
		//field获得需要的字段
		$arcCateData = $this->join('category','category_cid','=','cid')->field('aid,title,cname,thumb')->limit(Page::limit())->where("is_recycle=0")->get();
		
		//返回数据(需要返回多个数据就组成数组)
		$data = array(
			'page' => $page,
			'data' => $arcCateData
		);
		return $data;
   }
	
	     //回收站
	     //方法同文章显示一样,只是改变is_recycle的值,即寻找文章列表里面is_recycle的值为1的数据
		public function Restore(){
		//获得数据总数
		//where条件(is_recycle=0)因为is_recycle为0就是不在回收站,将文章表(article)和分类表(category)关联,并得到一个总值,即总共有多少条数据,即不在回收站的数据(数组)
		$total=$this->join('category','category_cid','=','cid')->where("is_recycle=1")->count();
//		p($total);die;
		//分页处理
		//框架自带函数处理分页
		$page=Page::row(3)->make($total);
		
		//关联获得数据
		//page::limit()=>返回limit语句(框架自带)
		//field获得需要的字段
		$arcCateData = $this->join('category','category_cid','=','cid')->field('aid,title,cname,thumb')->limit(Page::limit())->where("is_recycle=1")->get();
		
		//返回数据(需要返回多个数据就组成数组)
		$data = array(
			'page' => $page,
			'data' => $arcCateData
		);
		return $data;
//		p($data);
   }
	
	
	
	//编辑
	public function edit($aid){
		//一.****
		//验证article(文章)表
		if(!$this->create()) return false;
		//验证上传图片
		if($this->error) return false;
		//验证article_data表
		$arcDataModel = new \Common\Model\ArcData;
		//$this指的是当前模型,调用其他模型要用调用其他模型所获得的值
		if(!$arcDataModel->create()){
			$this->error=$arcDataModel->getError();
			return false;
		}
			//二.修改
		//修改文章表article
		$this->save();
		//修改article_data文章数据表
		$arcDataModel->where("article_aid={$aid}")->save();
		//修改article_tag(中间表)
		//获得中间表
		$arcTagModel = new \Common\Model\ArcTag;
		//1.先删除
		//$aid是通过模板里面的隐藏域获得
		$arcTagModel->where("article_aid={$aid}")->delete();
		//2.再添加
		$arcTagModel->store($aid);
		return true;
	}
	
	
}






























 ?>